package Stream_Study.MiddleMethod;

import java.util.ArrayList;
import java.util.Collections;

public class StreamDemo6 {
    public static void main(String[] args) {
        /*
            filter      过滤
            limit       获取前几个元素
            skip        跳过前几个元素

            注意1：中间方法，返回新的Stream流，原来的Stream流只能使用一次，建议使用链式编程
            注意2：修改Stream流中的数据，不会影响原来集合或者数组中的数据
         */

        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张无忌", "雏鹤爱", "樱岛麻衣", "小鸟游六花", "张三", "张三丰");

        //filter    过滤 要把张开头的去掉，其余的数据留下
//        list.stream().filter(new Predicate<String>() {
//            @Override
//            public boolean test(String s) {
//                //如果返回值为True，表示当前数据留下
//                //如果返回值为False，表示当前数据舍弃不要
//                return s.startsWith("张");
//            }
//        })

        /*
        Stream<String> stream1 = list.stream().filter(n -> !n.startsWith("张"));
        Stream<String> stream2 = stream1.filter(s -> s.length() != 3);
        stream2.forEach(System.out::println);

        Stream<String> stream3 = stream1.filter(s -> s.length() == 3);//stream has already been operated upon or closed
        stream3.forEach(System.out::println);
        */

//        list.stream().filter(n -> !n.startsWith("张")).forEach(System.out::println);
//        System.out.println("-----------------------");
//        System.out.println(list);

        //limit       获取前几个元素
        //skip        跳过前几个元素
        //"张无忌", "雏鹤爱", "樱岛麻衣", "小鸟游六花", "张三", "张三丰"

        //list.stream().limit(3).forEach(System.out::println);
        //System.out.println("===========================");
        //list.stream().skip(4).forEach(System.out::println);

        //要获取"雏鹤爱", "樱岛麻衣", "小鸟游六花"几个元素
        list.stream().skip(1).limit(3).forEach(System.out::println);
        System.out.println("--------------------------");
        list.stream().limit(4).skip(1).forEach(System.out::println);

    }
}
